builder-tool: Install a log writer
authorMatthias Clasen <mclasen@redhat.com>
Sun, 1 Nov 2020 20:48:37 +0000 (15:48 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 2 Nov 2020 04:09:26 +0000 (23:09 -0500)
Install a log writer function that is a bit simpler than
the default GLib log writer, and does not put PIDs and
timestamps in the output, so we can compare easily in
our testsuite.

gtk/tools/gtk-builder-tool.c

index e07cfb6218e1c53f8560b2ebcf8d5eda3a43aa3c..e45a52672d1b99f842ac668a5f25c5870ea74cb7 100644 (file)
@@ -52,11 +52,66 @@ usage (void)
   exit (1);
 }
 
+#if !GLIB_CHECK_VERSION(2,67,0)
+static gboolean
+g_log_writer_default_would_drop (GLogLevelFlags  level,
+                                 const char     *domain)
+{
+  return (level & (G_LOG_LEVEL_ERROR |
+                   G_LOG_LEVEL_CRITICAL |
+                   G_LOG_LEVEL_WARNING)) == 0;
+}
+#endif
+
+static GLogWriterOutput
+log_writer_func (GLogLevelFlags   level,
+                 const GLogField *fields,
+                 gsize            n_fields,
+                 gpointer         user_data)
+{
+  gsize i;
+  const char *domain = NULL;
+  const char *message = NULL;
+
+  for (i = 0; i < n_fields; i++)
+    {
+      if (g_strcmp0 (fields[i].key, "GLIB_DOMAIN") == 0)
+        domain = fields[i].value;
+      else if (g_strcmp0 (fields[i].key, "MESSAGE") == 0)
+        message = fields[i].value;
+    }
+
+  if (message != NULL && !g_log_writer_default_would_drop (level, domain))
+    {
+      const char *prefix;
+      switch (level & G_LOG_LEVEL_MASK)
+        {
+        case G_LOG_LEVEL_ERROR:
+          prefix = "ERROR";
+          break;
+        case G_LOG_LEVEL_CRITICAL:
+          prefix = "CRITICAL";
+          break;
+        case G_LOG_LEVEL_WARNING:
+          prefix = "WARNING";
+          break;
+        default:
+          prefix = "INFO";
+          break;
+        }
+      g_printerr ("%s-%s: %s\n", domain, prefix, message);
+    }
+
+  return G_LOG_WRITER_HANDLED;
+}
+
 int
 main (int argc, const char *argv[])
 {
   g_set_prgname ("gtk-builder-tool");
 
+  g_log_set_writer_func (log_writer_func, NULL, NULL);
+
   gtk_init ();
 
   gtk_test_register_all_types ();